// 分月饼, 分到的月饼是一个序列, 比如说从少到多的序列, 那么第一个人可以分 1个, 也可以是Math.floor(total/n) 个,
// 那么这个范围就是一个系数, 然后推到第二个人分得 ? 和第一个人相等作为最小, 最大是?  total - 前面分掉的 /n 个,
// 依次内推, 这样月饼分到底, 就是最终的组合个数
// 选择系数相乘 ? 还是选择递归到底 ?  试试系数相乘吧 ? 不准确, 因为后面基于前面, 前面没定, 后面没法定

const readline = require("readline");
const rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
});
let m, n; // m个员工, n个饼
rl.on("line", (line)=>{
    if(m === undefined) {
        [m, n] = line.trim().split(" ").map(Number)
        console.log(getResult(m, n))

        m = n = undefined
    }

})

function getResult(m, n) {
// 后者基于前者
    let ans = 0;
     dfs(0, 1, Math.floor(n/m), n)
    return ans
    /**
     *
     * @param start 员工角标
     * @param min 最少分得
     * @param max 最大分得
     * @param remain 当前还剩饼数
     */
    function dfs(start, min, max, remain) {
        // end
        if(start === m - 1) {
            if (remain - min <= 3) {
                ans++;
            }
            return;
        }

        for (let i = min; i <= max ; i++) {
            let currentMax = Math.min(Math.floor((remain - i)/(m-start - 1)), i + 3)
            dfs(start + 1, i, currentMax, remain - i)
        }
    }
}

